<?php

namespace app\api\controller;

use app\api\model\Member;
use app\api\model\MemberToken;
use think\facade\Request;

class Base
{
    public function test()
    {
        echo '当前项目所在根目录为：' . app()->getRootPath();
    }

    //登录接口
    public function login()
    {
        //第一步：接收账号密码，做数据校验
        $mobile = input('get.mobile');
        $password = input('get.password');
        $model = input('get.model');
        if (empty($mobile)) output_error('手机号码不能为空');
        if (empty($password)) output_error('密码不能为空');
        if (empty($model)) output_error('参数不完整');
        //第二步：构造查询语句，向数据库发送查询的请求，如果构造条件成功地查询回数据
        $condition = array();
        $condition[] = ['member_mobile', '=', $mobile];
        $condition[] = ['member_password', '=', md5($password)];
        $data = Member::where($condition)->find();
        if (empty($data)) output_error('账号或密码错误');
        //第三步：检验成功之后，生产TOken返回给客户端
        $token = md5($data['member_id'] . $data['member_mobile'] . time());
        //限制单设备登录的实现，先把该用户之前的TOKEN全部设为禁用
        MemberToken::where('member_id', '=', $data['member_id'])
            ->update(array('token_state' => 2));
        $tokenData = array();
        $tokenData['member_id'] = $data['member_id'];
        $tokenData['token_content'] = $token;
        $tokenData['device_model'] = $model;
        $tokenData['ip_address'] = Request::ip();
        $tokenData['real_address'] = get_ip_address(Request::ip());
        $tokenData['token_state'] = 1;
        //拓展 TOKEN有效期为 1天，假设一天的秒数为 65535
        $tokenData['end_time'] = time() + 65535;
        $tokenData['add_time'] = time();
        MemberToken::insert($tokenData);
        output_data($token);
    }

    //注册接口
    public function register()
    {
        //第一步：接受参数并校验
        $mobile = input('get.mobile');
        $password = input('get.password');
        $nickname = input('get.nickname');
        if (empty($mobile) || strlen($mobile) < 11) output_error('手机号码格式不正确');
        if (empty($password) || strlen($password) < 6) output_error('密码为空或者长度小于6位');
        if (empty($nickname)) output_error('昵称不能为空');
        //第二步：构造注册数据
        $data = array();
        $data['member_mobile'] = $mobile;
        $data['member_password'] = md5($password);
        $data['member_nickname'] = $nickname;
        $data['member_avatar'] = 'default.png';
        $data['add_time'] = time();
        //第二步：检查是否已经注册
        if (Member::register($data)) output_data('注册成功');
        output_error('注册失败，手机号码可能已存在');
    }

    //找回密码 此接口通过校验手机号与用户名是否匹配来重置用户的密码，是不安全的
    public function findPass()
    {
        //第一步：接受参数并校验
        $mobile = input('get.mobile');
        $nickname = input('get.nickname');
        $newPass = input('get.newpass');
        if (empty($mobile) || strlen($mobile) < 11) output_error('手机号码格式不正确');
        if (empty($nickname)) output_error('昵称不能为空');
        if (empty($newPass)) output_error('新密码不能为空');
        //第二步：构建查询条件
        //SELECT * FROM member where member_mobile = '10086' and member_nickname = '123'
        $condition = array();
        $condition[] = ['member_mobile', '=', $mobile];
        $condition[] = ['member_nickname', '=', $nickname];
        $data = Member::where($condition)->find();//find方法，查询一条数据，返回的是数组对象
        if (empty($data)) output_error('手机号码与昵称不匹配，无法重置密码');//如果查询返回的对象是空代表未匹配数据
        //第三步：构建新的密码
        Member::where('member_id', '=', $data['member_id'])->update(array('member_password' => md5($newPass)));
        output_data(1);
    }
}
